package main

/**
 * http://www.itspire.cn/article/116.html 
 */

import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"gorm.io/gorm/schema"
	"time"

	"fmt"
	"log"
)




var MyDB *gorm.DB

type Todo struct {
	gorm.Model
	Title	string 
	IsCompleted	bool
}

type Tag struct {
	gorm.Model
	Name string
}

func (Tag) TableName() string {
	return "mytag"
}

// mysql connection
func ConnectDB() {
	dsn := "bamboo:Bamboo@tcp(127.0.0.1:3306)/bamboo?charset=utf8mb4&parseTime=True&loc=Local"
	
	// gorm - v2
	// gorm.Config 参考 https://gorm.io/docs/gorm_config.html
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		NamingStrategy: schema.NamingStrategy{
			TablePrefix: "gormv2_",
			SingularTable: true,
		},
		Logger: logger.Default.LogMode(logger.Info),
	})

	fmt.Printf("%T", db)


	if err != nil {
		log.Panicln("连接数据库报错" + err.Error())
	}


	sqlDB, err := db.DB()

	// 最大空闲数
	sqlDB.SetMaxIdleConns(10)
	// 最大连接数
	sqlDB.SetMaxOpenConns(50)
	// 最长连接时间
	sqlDB.SetConnMaxLifetime(5 * time.Minute)

	// v2.0 没有如下配置logmode, 是放置在gorm.Config中 Logger 配置项
	// db.LogMode(true)

	MyDB = db

}


// func DisconnectDB() {
// 	if err := MyDB.Close(); err != nil {
// 		log.Println("数据库关闭失败：" + err.Error())
// 	}
// }






func main() {
	ConnectDB()
	// defer DisconnectDB()

	MyDB.AutoMigrate(&Todo{}, &Tag{})
	fmt.Println("done")
}
